import os
import shutil
import argparse
import sys

def move_matching_files(dir1, dir2, dir3):
    # 确保输出目录存在
    os.makedirs(dir3, exist_ok=True)

    # 获取目录1中所有文件的文件名（不含后缀）
    names_in_dir1 = {
        os.path.splitext(f)[0]
        for f in os.listdir(dir1)
        if os.path.isfile(os.path.join(dir1, f))
    }

    # 遍历目录2中的文件
    for f in os.listdir(dir2):
        src_path = os.path.join(dir2, f)
        if os.path.isfile(src_path):
            filename_no_ext, _ = os.path.splitext(f)
            if filename_no_ext in names_in_dir1:
                dst_path = os.path.join(dir3, f)
                print(f"移动: {src_path} -> {dst_path}")
                shutil.move(src_path, dst_path)


if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="根据目录1文件名匹配并移动目录2文件到目录3")
    parser.add_argument("--dir1", type=str, required=True, help="目录1: 基准文件所在目录（只比较文件名不含后缀）")
    parser.add_argument("--dir2", type=str, required=True, help="目录2: 待筛选文件所在目录")
    parser.add_argument("--dir3", type=str, required=True, help="目录3: 目标目录，匹配的文件将移动到这里")

    args = parser.parse_args()

    dir1, dir2, dir3 = args.dir1, args.dir2, args.dir3

    # 校验目录1和目录2是否存在
    for d in [dir1, dir2]:
        if not os.path.isdir(d):
            print(f"错误: 输入的目录不存在: {d}")
            sys.exit(1)

    move_matching_files(dir1, dir2, dir3)
